import { defineConfig, loadEnv } from "vite";
import path from "path";
import createVitePlugins from "./vite/plugins";

// https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => {
  // 获取环境变量
  const env = loadEnv(mode, process.cwd());
  const { 
    VITE_APP_ROUTE, //根路径
    VITE_APP_PORTAL, //端口
    VITE_APP_API_SERVE //接口服务
  } = env;

  return {
    // 项目根目录（index.html 文件所在的位置）。可以是一个绝对路径，或者一个相对于该配置文件本身的相对路径。
    // root: process.cwd(),
    // 部署生产环境和开发环境下的URL。
    // 默认情况下，vite 会假设你的应用是被部署在一个域名的根路径上
    // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上，你就需要用这个选项指定这个子路径。例如，如果你的应用被部署在 https://www.ruoyi.vip/admin/，则设置 baseUrl 为 /admin/。
    base: VITE_APP_ROUTE,
    // build: {
    //   chunkSizeWarningLimit:3000,
    // },
    plugins: createVitePlugins(env, command === "build"),
    //为了超图的编译添加以下配置
    define: {
      "process.env": {},
    },
    resolve: {
      // https://cn.vitejs.dev/config/#resolve-alias
      alias: {
        // 设置路径
        "~": path.resolve(__dirname, "./"),
        // 设置别名
        "@": path.resolve(__dirname, "./src"),
      },
      // https://cn.vitejs.dev/config/#resolve-extensions
      extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
    },
    // vite 相关配置
    server: {
      port: VITE_APP_PORTAL,
      host: true,
      open: true,
      proxy: {
        // https://cn.vitejs.dev/config/#server-proxy
        // '/dev-api': {
        //   target: 'http://localhost:8080',
        //   changeOrigin: true,
        //   rewrite: (p) => p.replace(/^\/dev-api/, ''),
        // },
        "/fxfzysx": {
          target: VITE_APP_API_SERVE,
          changeOrigin: true,
          pathRewrite: {
            "^/fxfzysx": "",
          },
        },
      },
    },
    //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file
    css: {
      postcss: {
        plugins: [
          {
            postcssPlugin: "internal:charset-removal",
            AtRule: {
              charset: (atRule) => {
                if (atRule.name === "charset") {
                  atRule.remove();
                }
              },
            },
          },
        ],
      },
    },
    // 构建选项
    build: {
      // 构建后是否生成 source map 文件
      sourcemap: true,
      // 指定输出路径
      outDir: 'dist',
      // 指定生成静态资源的存放路径
      assetsDir: './static',
      // 小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁用此项
      assetsInlineLimit: 4096,
      // 规定触发警告的 chunk 大小。（以 kbs 为单位）
      chunkSizeWarningLimit: 500,
      // minify: 'terser',
      // // 如果设置为false，整个项目中的所有 CSS 将被提取到一个 CSS 文件中
      // cssCodeSplit: true,
      // terserOptions: {
      //   compress: {
      //     // warnings: false,
      //     drop_console: true,  //打包时删除console
      //     drop_debugger: true, //打包时删除 debugger
      //     pure_funcs: ['console.log'],
      //   },
      //   output: {
      //     // 去掉注释内容
      //     comments: true,
      //   },
      // },
      // rollupOptions: {
      //   output: {
      //     manualChunks: {
      //       // 拆分代码，这个就是分包，配置完后自动按需加载，现在还比不上webpack的splitchunk，不过也能用了。
      //       vue: ['vue', 'vue-router', 'pinia'],
      //       echarts: ['echarts'],
      //     },
      //   },
      // },
      // brotliSize: false,
    }
  };
});
